You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In affected releases of gRPC-Go, it is possible for an attacker to send HTTP/2 requests, cancel them, and send subsequent requests, which is valid by the HTTP/2 protocol, but would cause the gRPC-Go server to launch more concurrent method handlers than the configured maximum stream limit.
Patches
This vulnerability was addressed by #6703 and has been included in patch releases: 1.56.3, 1.57.1, 1.58.3. It is also included in the latest release, 1.59.0.
Along with applying the patch, users should also ensure they are using the grpc.MaxConcurrentStreams server option to apply a limit to the server's resources used for any single connection.
What kind of vulnerability is it? Who is impacted?
It is an Authorization Bypass resulting from Improper Input Validation of the HTTP/2 :path pseudo-header.
The gRPC-Go server was too lenient in its routing logic, accepting requests where the :path omitted the mandatory leading slash (e.g., Service/Method instead of /Service/Method). While the server successfully routed these requests to the correct handler, authorization interceptors (including the official grpc/authz package) evaluated the raw, non-canonical path string. Consequently, "deny" rules defined using canonical paths (starting with /) failed to match the incoming request, allowing it to bypass the policy if a fallback "allow" rule was present.
Who is impacted?
This affects gRPC-Go servers that meet both of the following criteria:
They use path-based authorization interceptors, such as the official RBAC implementation in google.golang.org/grpc/authz or custom interceptors relying on info.FullMethod or grpc.Method(ctx).
Their security policy contains specific "deny" rules for canonical paths but allows other requests by default (a fallback "allow" rule).
The vulnerability is exploitable by an attacker who can send raw HTTP/2 frames with malformed :path headers directly to the gRPC server.
Patches
Has the problem been patched? What versions should users upgrade to?
Yes, the issue has been patched. The fix ensures that any request with a :path that does not start with a leading slash is immediately rejected with a codes.Unimplemented error, preventing it from reaching authorization interceptors or handlers with a non-canonical path string.
Users should upgrade to the following versions (or newer):
v1.79.3
The latest master branch.
It is recommended that all users employing path-based authorization (especially grpc/authz) upgrade as soon as the patch is available in a tagged release.
Workarounds
Is there a way for users to fix or remediate the vulnerability without upgrading?
While upgrading is the most secure and recommended path, users can mitigate the vulnerability using one of the following methods:
1. Use a Validating Interceptor (Recommended Mitigation)
Add an "outermost" interceptor to your server that validates the path before any other authorization logic runs:
funcpathValidationInterceptor(ctx context.Context, reqany, info*grpc.UnaryServerInfo, handler grpc.UnaryHandler) (any, error) {
ifinfo.FullMethod==""||info.FullMethod[0] !='/' {
returnnil, status.Errorf(codes.Unimplemented, "malformed method name")
}
returnhandler(ctx, req)
}
// Ensure this is the FIRST interceptor in your chains:=grpc.NewServer(
grpc.ChainUnaryInterceptor(pathValidationInterceptor, authzInterceptor),
)
2. Infrastructure-Level Normalization
If your gRPC server is behind a reverse proxy or load balancer (such as Envoy, NGINX, or an L7 Cloud Load Balancer), ensure it is configured to enforce strict HTTP/2 compliance for pseudo-headers and reject or normalize requests where the :path header does not start with a leading slash.
3. Policy Hardening
Switch to a "default deny" posture in your authorization policies (explicitly listing all allowed paths and denying everything else) to reduce the risk of bypasses via malformed inputs.
Multiple security vulnerabilities have been identified and addressed in grpc-go affecting the xDS RBAC authorization engine (internal/xds/rbac) and the HTTP/2 transport server implementation (internal/transport). These vulnerabilities could result in:
Authorization Bypass (Fail-Open) when translating xDS RBAC policies containing Metadata or RequestedServerName fields.
Denial of Service (High CPU Consumption) due to an HTTP/2 Rapid Reset mitigation bypass during client-initiated stream resets.
Denial of Service (Server Panic) when parsing crafted xDS RBAC policies containing NOT rules around unsupported fields.
Impact
What kind of vulnerability is it? Who is impacted?
xDS RBAC Authorization Bypass via Metadata & RequestedServerName matchers
Affected Component: xDS RBAC
Impact: When building policy matchers for gRPC RBAC from xDS configurations, unsupported permission and principal rules (specifically Metadata and RequestedServerName) were silently ignored and treated as no-ops.
If an authorization policy relied purely on these matchers for access control, treating those rules as no-ops effectively removed the restrictions.
If these unsupported rules were nested inside logical NOT rules (Permission_NotRule / Principal_NotId) or multi-condition OR/AND rules, silently dropping them changed the boolean logic flow of the authorization engine.
As a result, policy evaluation decisions could fail open, allowing unauthorized clients to access protected gRPC services or resources.
HTTP/2 Rapid Reset Mitigation Bypass / Denial of Service via Stream Aborts
Affected Component: HTTP/2 transport
Impact: Earlier mitigations in grpc-go for HTTP/2 Rapid Reset only applied threshold checks to items that directly resulted in control frames being written back to the wire, such as SETTINGS ACKs or server-initiated RST_STREAMs.
When a client initiated a rapid flood of stream creation (HEADERS) immediately followed by stream termination RST_STREAM, items queued up in the control buffer without counting against the transport response frame threshold. An attacker can repeatedly trigger this flood sequence to bypass reader blocking, resulting in high CPU usage, and Denial of Service (DoS).
Denial of Service (Panic) in xDS RBAC Engine via Unsupported Fields inside NOT Rules
Affected Component: xDS RBAC
Impact: The xDS RBAC policy translators recursively generate matchers for nested rules. When a NOT rule wrapped an unsupported or unhandled field (such as SourcedMetadata), the recursive step returned an empty matcher. This could result in a runtime panic when the RBAC engine attempts to authorize an incoming request.
An attacker or misconfigured/malicious xDS management server delivering an LDS/RDS update containing a NOT rule around an unhandled field causes the gRPC server process to crash immediately (CWE-248 / Denial of Service).
Patches
Has the problem been patched? What versions should users upgrade to?
All three issues have been fixed in master and will be released in 1.82.1 shortly.
Workarounds
Is there a way for users to fix or remediate the vulnerability without upgrading?
If upgrading grpc-go immediately is not possible, apply the following workarounds based on your deployment architecture:
For xDS RBAC Vulnerabilities & Panics: Ensure that upstream xDS management servers do not push RBAC policies containing Metadata, RequestedServerName, or NOT rules wrapping unsupported fields (such as SourcedMetadata) to grpc-go servers.
For HTTP/2 Rapid Reset DOS: Configure upstream reverse proxies or load balancers (such as Envoy) with strict HTTP/2 max_concurrent_streams limits and active rate limiting on RST_STREAM frequency per connection.
server: Stop reading from the connection when flooded by HTTP/2 frames. The default value for this limit is 100 frames, excluding DATA and HEADERS, and may be changed by setting environment variable GRPC_GO_EXPERIMENTAL_CONTROL_BUFFER_THROTTLE_LIMIT.
xds/rbac: Support Metadata and RequestedServerName permissions matcher fields. If present in a DENY rule, previously these would be ignored and fail-open.
xds/rbac: Fix panic when parsing unsupported fields in NotRule/NotId permissions.
xds/rbac: Support the deprecated source_ip principal identifier by treating it as equivalent to direct_remote_ip.
server: Remove support for GRPC_GO_EXPERIMENTAL_DISABLE_STRICT_PATH_CHECKING environment varibale. Strict incoming RPC path validation (which has been the default since v1.79.3) can no longer be disabled. (#9112)
transport: Add environment variable to change the default max header list size from 16MB to 8KB. This may be enabled by setting GRPC_GO_EXPERIMENTAL_ENABLE_8KB_DEFAULT_HEADER_LIST_SIZE=true. This will be enabled by default in a subsequent release. (#9019)
balancer: Load Balancing policy registry is now case-sensitive. Set GRPC_GO_EXPERIMENTAL_CASE_SENSITIVE_BALANCER_REGISTRIES=false (and file an issue) to revert to case-insensitive behavior. (#9017)
New Features
experimental/stats: Expose a new API, NewContextWithLabelCallback, to register a callback that is invoked when telemetry labels are added. (#8877)
client: Return a portion of the response body in the error message, when the client receives an unexpected non-gRPC HTTP response, to make debugging easier. (#8929)
server: Add environment variable GRPC_GO_SERVER_GOROUTINE_LABELS that controls setting runtime/pprof.Labels on goroutines spawned by the server. Set GRPC_GO_SERVER_GOROUTINE_LABELS=grpc.method=true to add the grpc.method label on goroutines spawned to handle incoming requests. (#9082)
xds/server: Fix a memory leak of HTTP filter instances occurring when route configurations are updated in-place during a Route Discovery Service (RDS) update. (#9138)
grpc: In the deprecated gzip Compressor (used via the deprecated WithCompressor dial option), enforce the MaxRecvMsgSize limit on the decompressed message buffer, preventing excessive memory allocation from highly compressed payloads. (#9114)
stats/opentelemetry: Record retry attempts, grpc.previous-rpc-attempts, at the call level and not the attempt level. (#8923)
encoding: Ensure Close() is always called on readers returned from Compressor.Decompress if possible. (#9135)
channelz: Fix the LastMessageSentTimestamp and LastMessageReceivedTimestamp fields in SocketMetrics to ensure they contain correct timestamp values. (#9109)
xds/rbac: Fix a potential authorization bypass caused by incorrectly falling through URI/DNS SANs to Subject Distinguished Name (DN) when matching the authenticated principal name. With this fix, only the first non-empty identity source will be used, as per gRFC A41. (#9111)
balancer/rls: Switch gauge metrics to asynchronous emission (once per collection cycle) to reduce telemetry noise and align with other gRPC language implementations. (#8808)
Dependencies
Minimum supported Go version is now 1.25. (#8969)
Bug Fixes
xds: Use the leaf cluster's security config for the TLS handshake instead of the aggregate cluster's config. (#8956)
transport: Send a RST_STREAM when receiving an END_STREAM when the stream is not already half-closed. (#8832)
xds: Fix ADS resource name validation to prevent a panic. (#8970)
New Features
grpc/stats: Add support for custom labels in per-call metrics (gRFC A108). (#9008)
xds: Add support for Server Name Indication (SNI) and SAN validation (gRFC A101). Disabled by default. To enable, set GRPC_EXPERIMENTAL_XDS_SNI=true environment variable. (#9016)
xds: Add support to control which fields get propagated from ORCA backend metric reports to LRS load reports (gRFC A85). Disabled by default. To enable, set GRPC_EXPERIMENTAL_XDS_ORCA_LRS_PROPAGATION=true. (#9005)
xds: Add metrics to track xDS client connectivity and cached resource state (gRFC A78). (#8807)
stats/otel: Enhance grpc.subchannel.disconnections metric by adding disconnection reason to the grpc.disconnect_error label (gRFC A94). This provides granular insights into why subchannels are closing. (#8973)
mem: Add mem.Buffer.Slice() API to slice the buffer like a slice. (#8977)
alts: Pool read buffers to lower memory utilization when sockets are unreadable. (#8964)
transport: Pool HTTP/2 framer read buffers to reduce idle memory consumption. Currently limited to Linux for ALTS and non-encrypted transports (TCP, Unix). To disable, set GRPC_GO_EXPERIMENTAL_HTTP_FRAMER_READ_BUFFER_POOLING=false and report any issues. (#9032)
server: fix an authorization bypass where malformed :path headers (missing the leading slash) could bypass path-based restricted "deny" rules in interceptors like grpc/authz. Any request with a non-canonical path is now immediately rejected with an Unimplemented error. (#8981)
experimental/stats: Update MetricsRecorder to require embedding the new UnimplementedMetricsRecorder (a no-op struct) in all implementations for forward compatibility. (#8780)
Behavior Changes
balancer/weightedtarget: Remove handling of Addresses and only handle Endpoints in resolver updates. (#8841)
New Features
experimental/stats: Add support for asynchronous gauge metrics through the new AsyncMetricReporter and RegisterAsyncReporter APIs. (#8780)
pickfirst: Add support for weighted random shuffling of endpoints, as described in gRFC A113.
This is enabled by default, and can be turned off using the environment variable GRPC_EXPERIMENTAL_PF_WEIGHTED_SHUFFLING. (#8864)
xds: Implement :authority rewriting, as specified in gRFC A81. (#8779)
balancer/randomsubsetting: Implement the random_subsetting LB policy, as specified in gRFC A68. (#8650)
mem: Replace the Reader interface with a struct for better performance and maintainability. (#8669)
Behavior Changes
balancer/pickfirst: Remove support for the old pick_first LB policy via the environment variable GRPC_EXPERIMENTAL_ENABLE_NEW_PICK_FIRST=false. The new pick_first has been the default since v1.71.0. (#8672)
Bug Fixes
xdsclient: Fix a race condition in the ADS stream implementation that could result in resource-not-found errors, causing the gRPC client channel to move to TransientFailure. (#8605)
client: Ignore HTTP status header for gRPC streams. (#8548)
client: Set a read deadline when closing a transport to prevent it from blocking indefinitely on a broken connection. (#8534)
client: Fix a bug where default port 443 was not automatically added to addresses without a specified port when sent to a proxy.
Setting environment variable GRPC_EXPERIMENTAL_ENABLE_DEFAULT_PORT_FOR_PROXY_TARGET=false disables this change; please file a bug if any problems are encountered as we will remove this option soon. (#8613)
balancer/pickfirst: Fix a bug where duplicate addresses were not being ignored as intended. (#8611)
server: Fix a bug that caused overcounting of channelz metrics for successful and failed streams. (#8573)
balancer/pickfirst: When configured, shuffle addresses in resolver updates that lack endpoints. Since gRPC automatically adds endpoints to resolver updates, this bug only affects custom LB policies that delegate to pick_first but don't set endpoints. (#8610)
mem: Clear large buffers before re-using. (#8670)
Performance Improvements
transport: Reduce heap allocations to reduce time spent in garbage collection. (#8624, #8630, #8639, #8668)
transport: Avoid copies when reading and writing Data frames. (#8657, #8667)
stats/opentelemetry: Add support for optional label grpc.lb.backend_service in per-call metrics (#8637)
xds: Add support for JWT Call Credentials as specified in gRFC A97. Set environment variable GRPC_EXPERIMENTAL_XDS_BOOTSTRAP_CALL_CREDS=true to enable this feature. (#8536)
xds: Remove support for GRPC_EXPERIMENTAL_XDS_FALLBACK environment variable. Fallback support can no longer be disabled. (#8482)
stats: Introduce DelayedPickComplete event, a type alias of PickerUpdated. (#8465)
This (combined) event will now be emitted only once per call, when a transport is successfully selected for the attempt.
OpenTelemetry metrics will no longer have multiple "Delayed LB pick complete" events in Go, matching other gRPC languages.
A future release will delete the PickerUpdated symbol.
credentials: Properly apply grpc.WithAuthority as the highest-priority option for setting authority, above the setting in the credentials themselves. (#8488)
Now that this WithAuthority is available, the credentials should not be used to override the authority.
round_robin: Randomize the order in which addresses are connected to in order to spread out initial RPC load between clients. (#8438)
server: Return status code INTERNAL when a client sends more than one request in unary and server streaming RPC. (#8385)
This is a behavior change but also a bug fix to bring gRPC-Go in line with the gRPC spec.
New Features
dns: Add an environment variable (GRPC_ENABLE_TXT_SERVICE_CONFIG) to provide a way to disable TXT lookups in the DNS resolver (by setting it to false). By default, TXT lookups are enabled, as they were previously. (#8377)
xdsclient: Fix a rare panic caused by processing a response from a closed server. (#8389)
stats: Fix metric unit formatting by enclosing non-standard units like call and endpoint in curly braces to comply with UCUM and gRPC OpenTelemetry guidelines. (#8481)
xds: Fix possible panic when clusters are removed from the xds configuration. (#8428)
xdsclient: Fix a race causing "resource doesn not exist" when rapidly subscribing and unsubscribing to the same resource. (#8369)
client: When determining the authority, properly percent-encode (if needed, which is unlikely) when the target string omits the hostname and only specifies a port (grpc.NewClient(":<port-number-or-name>")). (#8488)
grpc: introduce new DialOptions and ServerOptions (WithStaticStreamWindowSize, WithStaticConnWindowSize, StaticStreamWindowSize, StaticConnWindowSize) that force fixed window sizes for all HTTP/2 connections. By default, gRPC uses dynamic sizing of these windows based upon a BDP estimation algorithm. The existing options (WithInitialWindowSize, etc) also disable BDP estimation, but this behavior will be changed in a following release. (#8283)
API Changes
balancer: add ExitIdle method to Balancer interface. Earlier, implementing this method was optional. (#8367)
Behavior Changes
xds: Remove the GRPC_EXPERIMENTAL_ENABLE_LEAST_REQUEST environment variable that allows disabling the least request balancer with xDS. Least request was made available by default with xDS in v1.72.0. (#8248)
Version 1.74.1 retracts release v1.74.0 and itself. Release 1.74.0 was accidentally tagged on the wrong commit and should not be used. Version 1.73.0 should be used until 1.74.2 is released.
balancer/ringhash: move LB policy from xds/internal to exported path to facilitate use without xds (#8249)
xds: enable least request LB policy by default. It can be disabled by setting GRPC_EXPERIMENTAL_ENABLE_LEAST_REQUEST=false in your environment. (#8253)
grpc: add a CallAuthority Call Option that can be used to overwrite the http :authority header on per-RPC basis. (#8068)
stats/opentelemetry: add trace event for name resolution delay. (#8074)
health: added List method to gRPC Health service. (#8155)
ringhash: implement features from gRFC A76. (#8159)
xds: add functionality to support SPIFFE Bundle Maps as roots of trust in XDS which can be enabled by setting GRPC_EXPERIMENTAL_XDS_MTLS_SPIFFE=true. (#8167, #8180, #8229, #8343)
Bug Fixes
xds: locality ID metric label is changed to make it consistent with gRFC A78. (#8256)
client: fail RPCs on the client when using extremely short contexts that expire before the grpc-timeout header is created. (#8312)
server: non-positive grpc-timeout header values are now rejected. This is consistent with the gRPC protocol spec. (#8290)
client: HTTP Proxy connections are no longer attempted for addresses with non-TCP network types. (#8215)
client: Fix bug that causes RPCs to fail with status INTERNAL instead of CANCELLED or DEADLINE_EXCEEDED when receiving a RST_STREAM frame in the middle of the gRPC message. (#8289)
pickfirst: The new pick first LB policy is made the default. The new LB policy implements the Happy Eyeballs algorithm. To disable the new policy set the environment variable GRPC_EXPERIMENTAL_ENABLE_NEW_PICK_FIRST to false (case insensitive).
Bug Fixes
xds: fix support for circuit breakers and load reporting in LOGICAL_DNS clusters (#8169, #8170)
xds/cds: improve RPC error messages when resources are not found (#8122)
balancer/priority: fix race that could leak balancers and goroutines during shutdown (#8095)
stats/opentelemetry: fix trace attributes message sequence numbers to start from 0 (#8237)
balancer/pickfirstleaf: fix panic if deprecated Address.Metadata field is set to a non-comparable value by ignoring the field (#8227)
Behavior Changes
transport: make servers send an HTTP/2 RST_STREAM frame to cancel a stream when the deadline expires (#8071)
Documentation
stats: clarify the expected sequence of events on a stats handler (#7885)
grpc: fix a bug causing an extra Read from the compressor if a compressed message is the same size as the limit. This could result in a panic with the built-in gzip compressor (#8178)
xds: restore the behavior of reading the bootstrap config before creating the first xDS client instead of at package init time (#8164)
stats/opentelemetry: use TextMapPropagator and TracerProvider from TraceOptions instead of OpenTelemetry globals (#8166)
client: fix races when an http proxy is configured that could lead to deadlocks or panics (#8195)
client: fix bug causing RPC failures with message "no children to pick from" when using a custom resolver that calls the deprecated NewAddress API (#8149)
wrr: fix slow processing of address updates that could result in problems including RPC failures for servers with a large number of backends (#8179)
balancer: Custom LB policies that record metrics must use the new MetricsRecorder method on Balancer.ClientConn instead of the removed Balancer.BuildOptions.MetricsRecorder field to obtain a metrics recorder. (#8027)
balancer: balancer.ClientConn implementations must now embed a delegate implementation. This allows grpc-go to add new methods to the interface and remain backward compatible. (#8026)
balancer/endpointsharding: The constructor accepts the child balancer's builder and a struct with optional configuration. (#8052)
New Features
xds: Add support for dualstack via the additional_addresses field in the Endpoint resource. To disable this feature, set the environment variable GRPC_EXPERIMENTAL_XDS_DUALSTACK_ENDPOINTS=false. (#8134)
stats/opentelemetry: Add experimental support for OpenTelemetry tracing. (#7852)
xds/internal/xdsclient: Add counter metrics for valid and invalid resource updates. (#8038)
balancer/endpointsharding: Balancers created with the new DisableAutoReconnect option will not attempt to call ExitIdle automatically on their children when the children report idle. (#8052)
Bug Fixes
client: Fix support for proxies when using grpc.NewClient so the target is resolved by the proxy as expected. (#7881)
Added WithLocalDNSResolution() dial option to explicitly force target resolution on the client instead. (#7881)
weightedtarget: Return erroring picker when no targets are configured. (#8070)
xds: Fail RPCs with UNAVAILABLE when the EDS resource is missing or contains no endpoints (#8070)
xdsclient: Fix a bug where connectivity failures were reported to resource watchers before trying all listed servers. (#8075)
grpc: Fix the number of bytes reported in the error message when encoded messages are larger than 4GB. (#8033)
xds: Fixed a bug preventing tests from creating multiple servers or channels with different bootstrap configs. ([#8050](https://redirect.gith
✂ Note
PR body was truncated to here.
Configuration
📅 Schedule: (UTC)
Branch creation
At any time (no schedule defined)
Automerge
At any time (no schedule defined)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
If you want to rebase/retry this PR, check this box
In order to perform the update(s) described in the table above, Renovate ran the go get command, which resulted in the following additional change(s):
4 additional dependencies were updated
The go directive was updated for compatibility reasons
Details:
Package
Change
go
1.13 -> 1.25.0
github.com/stretchr/testify
v1.7.0 -> v1.11.1
go.uber.org/zap
v1.15.0 -> v1.16.0
golang.org/x/crypto
v0.0.0-20210421170649-83a5a9bb288b -> v0.50.0
golang.org/x/net
v0.0.0-20210502030024-e5908800b52b -> v0.53.0
renovateBot
changed the title
fix(deps): update module google.golang.org/grpc to v1.56.3 [security]
fix(deps): update module google.golang.org/grpc to v1.56.3 [security] - autoclosed
Feb 12, 2026
renovateBot
changed the title
fix(deps): update module google.golang.org/grpc to v1.56.3 [security] - autoclosed
fix(deps): update module google.golang.org/grpc to v1.56.3 [security]
Feb 12, 2026
renovateBot
changed the title
fix(deps): update module google.golang.org/grpc to v1.56.3 [security]
fix(deps): update module google.golang.org/grpc to v1.79.3 [security]
Mar 19, 2026
renovateBot
changed the title
fix(deps): update module google.golang.org/grpc to v1.79.3 [security]
fix(deps): update module google.golang.org/grpc to v1.79.3 [security] - autoclosed
Mar 27, 2026
renovateBot
changed the title
fix(deps): update module google.golang.org/grpc to v1.79.3 [security] - autoclosed
fix(deps): update module google.golang.org/grpc to v1.79.3 [security]
Mar 30, 2026
renovateBot
changed the title
fix(deps): update module google.golang.org/grpc to v1.79.3 [security]
Update module google.golang.org/grpc to v1.79.3 [SECURITY]
Apr 8, 2026
renovateBot
changed the title
Update module google.golang.org/grpc to v1.79.3 [SECURITY]
Update module google.golang.org/grpc to v1.79.3 [SECURITY] - autoclosed
Apr 14, 2026
renovateBot
changed the title
Update module google.golang.org/grpc to v1.79.3 [SECURITY]
Update module google.golang.org/grpc to v1.79.3 [SECURITY] - autoclosed
May 20, 2026
renovateBot
changed the title
Update module google.golang.org/grpc to v1.79.3 [SECURITY] - autoclosed
Update module google.golang.org/grpc to v1.79.3 [SECURITY]
May 20, 2026
renovateBot
changed the title
Update module google.golang.org/grpc to v1.79.3 [SECURITY]
Update module google.golang.org/grpc to v1.79.3 [SECURITY] - autoclosed
May 22, 2026
renovateBot
changed the title
Update module google.golang.org/grpc to v1.79.3 [SECURITY] - autoclosed
Update module google.golang.org/grpc to v1.79.3 [SECURITY]
May 22, 2026
renovateBot
changed the title
Update module google.golang.org/grpc to v1.79.3 [SECURITY]
Update module google.golang.org/grpc to v1.82.1 [SECURITY]
Jul 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
v1.29.1→v1.82.1gRPC-Go HTTP/2 Rapid Reset vulnerability
GHSA-m425-mq94-257g
More information
Details
Impact
In affected releases of gRPC-Go, it is possible for an attacker to send HTTP/2 requests, cancel them, and send subsequent requests, which is valid by the HTTP/2 protocol, but would cause the gRPC-Go server to launch more concurrent method handlers than the configured maximum stream limit.
Patches
This vulnerability was addressed by #6703 and has been included in patch releases: 1.56.3, 1.57.1, 1.58.3. It is also included in the latest release, 1.59.0.
Along with applying the patch, users should also ensure they are using the
grpc.MaxConcurrentStreamsserver option to apply a limit to the server's resources used for any single connection.Workarounds
None.
References
#6703
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
gRPC-Go has an authorization bypass via missing leading slash in :path
CVE-2026-33186 / GHSA-p77j-4mvh-x3m3
More information
Details
Impact
What kind of vulnerability is it? Who is impacted?
It is an Authorization Bypass resulting from Improper Input Validation of the HTTP/2
:pathpseudo-header.The gRPC-Go server was too lenient in its routing logic, accepting requests where the
:pathomitted the mandatory leading slash (e.g.,Service/Methodinstead of/Service/Method). While the server successfully routed these requests to the correct handler, authorization interceptors (including the officialgrpc/authzpackage) evaluated the raw, non-canonical path string. Consequently, "deny" rules defined using canonical paths (starting with/) failed to match the incoming request, allowing it to bypass the policy if a fallback "allow" rule was present.Who is impacted?
This affects gRPC-Go servers that meet both of the following criteria:
google.golang.org/grpc/authzor custom interceptors relying oninfo.FullMethodorgrpc.Method(ctx).The vulnerability is exploitable by an attacker who can send raw HTTP/2 frames with malformed
:pathheaders directly to the gRPC server.Patches
Has the problem been patched? What versions should users upgrade to?
Yes, the issue has been patched. The fix ensures that any request with a
:paththat does not start with a leading slash is immediately rejected with acodes.Unimplementederror, preventing it from reaching authorization interceptors or handlers with a non-canonical path string.Users should upgrade to the following versions (or newer):
It is recommended that all users employing path-based authorization (especially
grpc/authz) upgrade as soon as the patch is available in a tagged release.Workarounds
Is there a way for users to fix or remediate the vulnerability without upgrading?
While upgrading is the most secure and recommended path, users can mitigate the vulnerability using one of the following methods:
1. Use a Validating Interceptor (Recommended Mitigation)
Add an "outermost" interceptor to your server that validates the path before any other authorization logic runs:
2. Infrastructure-Level Normalization
If your gRPC server is behind a reverse proxy or load balancer (such as Envoy, NGINX, or an L7 Cloud Load Balancer), ensure it is configured to enforce strict HTTP/2 compliance for pseudo-headers and reject or normalize requests where the
:pathheader does not start with a leading slash.3. Policy Hardening
Switch to a "default deny" posture in your authorization policies (explicitly listing all allowed paths and denying everything else) to reduce the risk of bypasses via malformed inputs.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
gRPC-Go: xDS RBAC and HTTP/2 Vulnerabilities
GHSA-hrxh-6v49-42gf
More information
Details
Multiple security vulnerabilities have been identified and addressed in grpc-go affecting the xDS RBAC authorization engine (internal/xds/rbac) and the HTTP/2 transport server implementation (internal/transport). These vulnerabilities could result in:
MetadataorRequestedServerNamefields.NOTrules around unsupported fields.Impact
What kind of vulnerability is it? Who is impacted?
xDS RBAC Authorization Bypass via
Metadata&RequestedServerNamematcherspermissionandprincipalrules (specificallyMetadataandRequestedServerName) were silently ignored and treated as no-ops.NOTrules (Permission_NotRule/Principal_NotId) or multi-conditionOR/ANDrules, silently dropping them changed the boolean logic flow of the authorization engine.As a result, policy evaluation decisions could fail open, allowing unauthorized clients to access protected gRPC services or resources.
HTTP/2 Rapid Reset Mitigation Bypass / Denial of Service via Stream Aborts
SETTINGSACKs or server-initiatedRST_STREAMs.When a client initiated a rapid flood of stream creation (
HEADERS) immediately followed by stream terminationRST_STREAM, items queued up in the control buffer without counting against the transport response frame threshold. An attacker can repeatedly trigger this flood sequence to bypass reader blocking, resulting in high CPU usage, and Denial of Service (DoS).Denial of Service (Panic) in xDS RBAC Engine via Unsupported Fields inside NOT Rules
NOTrule wrapped an unsupported or unhandled field (such asSourcedMetadata), the recursive step returned an empty matcher. This could result in a runtime panic when the RBAC engine attempts to authorize an incoming request.An attacker or misconfigured/malicious xDS management server delivering an LDS/RDS update containing a
NOTrule around an unhandled field causes the gRPC server process to crash immediately (CWE-248 / Denial of Service).Patches
Has the problem been patched? What versions should users upgrade to?
All three issues have been fixed in
masterand will be released in 1.82.1 shortly.Workarounds
Is there a way for users to fix or remediate the vulnerability without upgrading?
If upgrading grpc-go immediately is not possible, apply the following workarounds based on your deployment architecture:
Metadata,RequestedServerName, orNOTrules wrapping unsupported fields (such asSourcedMetadata) to grpc-go servers.max_concurrent_streamslimits and active rate limiting onRST_STREAMfrequency per connection.Severity
8.27.55.9Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
grpc/grpc-go (google.golang.org/grpc)
v1.82.1: Release 1.82.1Compare Source
Security
GRPC_GO_EXPERIMENTAL_CONTROL_BUFFER_THROTTLE_LIMIT.MetadataandRequestedServerNamepermissions matcher fields. If present in a DENY rule, previously these would be ignored and fail-open.NotRule/NotIdpermissions.source_ipprincipal identifier by treating it as equivalent todirect_remote_ip.v1.82.0: Release 1.82.0Compare Source
Behavior Changes
GRPC_GO_EXPERIMENTAL_DISABLE_STRICT_PATH_CHECKINGenvironment varibale. Strict incoming RPC path validation (which has been the default sincev1.79.3) can no longer be disabled. (#9112)16MBto8KB. This may be enabled by settingGRPC_GO_EXPERIMENTAL_ENABLE_8KB_DEFAULT_HEADER_LIST_SIZE=true. This will be enabled by default in a subsequent release. (#9019)GRPC_GO_EXPERIMENTAL_CASE_SENSITIVE_BALANCER_REGISTRIES=false(and file an issue) to revert to case-insensitive behavior. (#9017)New Features
NewContextWithLabelCallback, to register a callback that is invoked when telemetry labels are added. (#8877)GRPC_GO_SERVER_GOROUTINE_LABELSthat controls settingruntime/pprof.Labelson goroutines spawned by the server. SetGRPC_GO_SERVER_GOROUTINE_LABELS=grpc.method=trueto add thegrpc.methodlabel on goroutines spawned to handle incoming requests. (#9082)Bug Fixes
gzipCompressor (used via the deprecatedWithCompressordial option), enforce theMaxRecvMsgSizelimit on the decompressed message buffer, preventing excessive memory allocation from highly compressed payloads. (#9114)grpc.previous-rpc-attempts, at the call level and not the attempt level. (#8923)Close()is always called on readers returned fromCompressor.Decompressif possible. (#9135)LastMessageSentTimestampandLastMessageReceivedTimestampfields inSocketMetricsto ensure they contain correct timestamp values. (#9109)v1.81.1: Release 1.81.1Compare Source
Security
v1.81.0: Release 1.81.0Compare Source
Behavior Changes
Dependencies
Bug Fixes
RST_STREAMwhen receiving anEND_STREAMwhen the stream is not already half-closed. (#8832)New Features
GRPC_EXPERIMENTAL_XDS_SNI=trueenvironment variable. (#9016)GRPC_EXPERIMENTAL_XDS_ORCA_LRS_PROPAGATION=true. (#9005)grpc.subchannel.disconnectionsmetric by adding disconnection reason to thegrpc.disconnect_errorlabel (gRFC A94). This provides granular insights into why subchannels are closing. (#8973)mem.Buffer.Slice()API to slice the buffer like a slice. (#8977)Performance Improvements
GRPC_GO_EXPERIMENTAL_HTTP_FRAMER_READ_BUFFER_POOLING=falseand report any issues. (#9032)v1.80.0Compare Source
v1.79.3: Release 1.79.3Compare Source
Security
grpc/authz. Any request with a non-canonical path is now immediately rejected with anUnimplementederror. (#8981)v1.79.2: Release 1.79.2Compare Source
Bug Fixes
v1.79.1: Release 1.79.1Compare Source
Bug Fixes
-devsuffix from the User-Agent header. (#8902)v1.79.0: Release 1.79.0Compare Source
API Changes
SetDefaultBufferPoolto change the default buffer pool. (#8806)MetricsRecorderto require embedding the newUnimplementedMetricsRecorder(a no-op struct) in all implementations for forward compatibility. (#8780)Behavior Changes
Addressesand only handleEndpointsin resolver updates. (#8841)New Features
AsyncMetricReporterandRegisterAsyncReporterAPIs. (#8780)GRPC_EXPERIMENTAL_PF_WEIGHTED_SHUFFLING. (#8864):authorityrewriting, as specified in gRFC A81. (#8779)random_subsettingLB policy, as specified in gRFC A68. (#8650)Bug Fixes
CONNECTINGstate. (#8813)WithDecompressororRPCDecompressor). (#8765)Performance Improvements
bufferobjects. (#8784)v1.78.0: Release 1.78.0Compare Source
Behavior Changes
New Features
Bug Fixes
Unknownon malformed grpc-status. (#8735)experimental.AcceptCompressorsso callers can restrict thegrpc-accept-encodingheader advertised for a call. (#8718)StringMatcherwhere regexes would match incorrectly when ignore_case is set to true. (#8723)OnFinishcall option not being invoked for RPCs where stream creation failed. (#8710)Performance Improvements
v1.77.0: Release 1.77.0Compare Source
API Changes
Readerinterface with a struct for better performance and maintainability. (#8669)Behavior Changes
pick_firstLB policy via the environment variableGRPC_EXPERIMENTAL_ENABLE_NEW_PICK_FIRST=false. The newpick_firsthas been the default sincev1.71.0. (#8672)Bug Fixes
resource-not-founderrors, causing the gRPC client channel to move toTransientFailure. (#8605)GRPC_EXPERIMENTAL_ENABLE_DEFAULT_PORT_FOR_PROXY_TARGET=falsedisables this change; please file a bug if any problems are encountered as we will remove this option soon. (#8613)pick_firstbut don't set endpoints. (#8610)Performance Improvements
New Features
grpc.lb.backend_servicein per-call metrics (#8637)GRPC_EXPERIMENTAL_XDS_BOOTSTRAP_CALL_CREDS=trueto enable this feature. (#8536)v1.76.0: Release 1.76.0Compare Source
Dependencies
Bug Fixes
INTERNALwhen a server sends zero response messages for a unary or client-streaming RPC. (#8523)INTERNALinstead ofUNKNOWNupon receiving http headers with status 1xx andEND_STREAMflag set. (#8518)IDLEstate on backend address change. (#8615)New Features
credentials/jwtpackage providing file-based JWT PerRPCCredentials (A97). (#8431)Performance Improvements
v1.75.1: Release 1.75.1Compare Source
Bug Fixes
v1.75.0: Release 1.75.0Compare Source
Behavior Changes
DelayedPickCompleteevent, a type alias ofPickerUpdated. (#8465)PickerUpdatedsymbol.grpc.WithAuthorityas the highest-priority option for setting authority, above the setting in the credentials themselves. (#8488)WithAuthorityis available, the credentials should not be used to override the authority.New Features
GRPC_ENABLE_TXT_SERVICE_CONFIG) to provide a way to disable TXT lookups in the DNS resolver (by setting it tofalse). By default, TXT lookups are enabled, as they were previously. (#8377)Bug Fixes
callandendpointin curly braces to comply with UCUM and gRPC OpenTelemetry guidelines. (#8481)grpc.NewClient(":<port-number-or-name>")). (#8488)v1.74.3: Release 1.74.3Compare Source
Bug Fixes
v1.74.2: Release 1.74.2Compare Source
New Features
DialOptionsandServerOptions(WithStaticStreamWindowSize,WithStaticConnWindowSize,StaticStreamWindowSize,StaticConnWindowSize) that force fixed window sizes for all HTTP/2 connections. By default, gRPC uses dynamic sizing of these windows based upon a BDP estimation algorithm. The existing options (WithInitialWindowSize, etc) also disable BDP estimation, but this behavior will be changed in a following release. (#8283)API Changes
ExitIdlemethod toBalancerinterface. Earlier, implementing this method was optional. (#8367)Behavior Changes
GRPC_EXPERIMENTAL_ENABLE_LEAST_REQUESTenvironment variable that allows disabling the least request balancer with xDS. Least request was made available by default with xDS in v1.72.0. (#8248)Bug Fixes
Attempt to set a bootstrap configuration...when creating multiple directpath channels. (#8419)Performance Improvements
mem.Readerobjects. (#8360)Documentation
v1.74.1: Release 1.74.1Compare Source
Version 1.74.1 retracts release v1.74.0 and itself. Release 1.74.0 was accidentally tagged on the wrong commit and should not be used. Version 1.73.0 should be used until 1.74.2 is released.
v1.74.0: Release 1.74.0Compare Source
Release 1.74.0 was accidentally tagged on the wrong commit and should not be used. Version 1.73.0 should be used until 1.74.1 is released.
v1.73.1: Release 1.73.1Compare Source
Bug Fixes
v1.73.0: Release 1.73.0Compare Source
New Features
GRPC_EXPERIMENTAL_ENABLE_LEAST_REQUEST=falsein your environment. (#8253)CallAuthorityCall Option that can be used to overwrite the http:authorityheader on per-RPC basis. (#8068)Listmethod to gRPC Health service. (#8155)GRPC_EXPERIMENTAL_XDS_MTLS_SPIFFE=true. (#8167, #8180, #8229, #8343)Bug Fixes
grpc-timeoutheader is created. (#8312)grpc-timeoutheader values are now rejected. This is consistent with the gRPC protocol spec. (#8290)Performance Improvements
Documentation
v1.72.3: Release 1.72.3Compare Source
Bug Fixes
v1.72.2: Release 1.72.2Compare Source
Bug Fixes
NO_PROXYenvironment variable when connecting to locally-resolved addresses (case 2 from gRFC A1). (#8329)v1.72.1: Release 1.72.1Compare Source
Bug Fixes
v1.72.0: Release 1.72.0Compare Source
Dependencies
API Changes
AddressMapV2with generics to ultimately replaceAddressMap. DeprecateAddressMapfor deletion (#8187)New Features
grpc.xds_client.server_failurecounter metric on xDS client to record connectivity errors (#8203)maxAgeto exceed 5 minutes ifstaleAgeis set in the LB policy configuration (#8137)GRPC_EXPERIMENTAL_ENABLE_NEW_PICK_FIRSTtofalse(case insensitive).Bug Fixes
Behavior Changes
Documentation
v1.71.3: Release 1.71.3Compare Source
Bug Fixes
NO_PROXYenvironment variable when connecting to locally-resolved addresses (case 2 from gRFC A1). (#8329)v1.71.2: Release 1.71.2Compare Source
Bug Fixes
v1.71.1: Release 1.71.1Compare Source
Bug Fixes
TextMapPropagatorandTracerProviderfromTraceOptionsinstead of OpenTelemetry globals (#8166)NewAddressAPI (#8149)v1.71.0: Release 1.71.0Compare Source
API Changes
MetricsRecordermethod onBalancer.ClientConninstead of the removedBalancer.BuildOptions.MetricsRecorderfield to obtain a metrics recorder. (#8027)balancer.ClientConnimplementations must now embed a delegate implementation. This allows grpc-go to add new methods to the interface and remain backward compatible. (#8026)New Features
GRPC_EXPERIMENTAL_XDS_DUALSTACK_ENDPOINTS=false. (#8134)DisableAutoReconnectoption will not attempt to callExitIdleautomatically on their children when the children report idle. (#8052)Bug Fixes
grpc.NewClientso the target is resolved by the proxy as expected. (#7881)WithLocalDNSResolution()dial option to explicitly force target resolution on the client instead. (#7881)UNAVAILABLEwhen the EDS resource is missing or contains no endpoints (#8070)Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.